home *** CD-ROM | disk | FTP | other *** search
/ Programming Languages Suite / ProgramD2.iso / Borland / Borland C++ V5.02 / TBEXPERT.PAK / STATMGR.CPP < prev    next >
C/C++ Source or Header  |  1997-05-06  |  10KB  |  445 lines

  1. //----------------------------------------------------------------------------
  2. // ObjectWindows
  3. // Copyright (c) 1995, 1995 by Borland International, All Rights Reserved
  4. //
  5. // Filename:    statmgr.cpp
  6. //
  7. // Date:        27-Sep-95
  8. //
  9. // Description:
  10. //----------------------------------------------------------------------------
  11. #include <owl/pch.h>
  12. #include <owl/dialog.h>
  13. #include <owl/edit.h>
  14. #include <owl/combobox.h>
  15. #include <stdio.h>
  16. #include "TBExpert.h"
  17.  
  18. static char Temp[255];
  19.  
  20. //
  21. // class TGadgetDialog
  22. // ~~~~~ ~~~~~~~~~~~~~
  23. class TGadgetDialog : public TDialog {
  24.   public:
  25.     TGadgetDialog(int factoryIndex, TWindow* parent, TResId resId)
  26.     :
  27.       TDialog(parent, resId),
  28.       FactoryIndex(factoryIndex)
  29.     {
  30.       Id = new TEdit(this, ID_ID);
  31.       ResId = new TEdit(this, ID_RESID);
  32.       BorderStyle = new TComboBox(this, ID_BORDERSTYLE);
  33.     }
  34.  
  35.    ~TGadgetDialog() { CloseWindow(); }
  36.  
  37.     void SetupWindow();
  38.     void CleanupWindow();
  39.  
  40.     void CmDummy() {
  41. //      CloseWindow();
  42. //      GetApplication()->GetMainWindow()->GetClientWindow()->PostMessage(WUM_DONEMODIFYINGGADGET);
  43.     }
  44.  
  45.     TEdit* ResId;
  46.     TEdit* Id;
  47.     TComboBox* BorderStyle;
  48.     int FactoryIndex;
  49.  
  50.   DECLARE_RESPONSE_TABLE(TGadgetDialog);
  51. };
  52.  
  53. DEFINE_RESPONSE_TABLE1(TGadgetDialog, TDialog)
  54.   EV_COMMAND(IDOK, CmDummy),
  55.   EV_COMMAND(IDCANCEL, CmDummy),
  56. END_RESPONSE_TABLE;
  57.  
  58. void
  59. TGadgetDialog::SetupWindow()
  60. {
  61.   TDialog::SetupWindow();
  62.   TGadgetFactory* factory = GadgetFactories[FactoryIndex];
  63.  
  64.   if (factory->GetResId())
  65.     ResId->SetText(factory->GetResId());
  66.   else
  67.     ResId->SetText("");
  68.  
  69.   sprintf(Temp, "%d", factory->GetId());
  70.   Id->SetText(Temp);
  71.  
  72.   struct {
  73.     char* Name;
  74.   } mapping[] = {
  75.     { "None" },
  76.     { "Plain" },
  77.     { "Raised" },
  78.     { "Recessed" },
  79.     { "Embossed" },
  80.     { "Grooved" },
  81.     { "ButtonUp" },
  82.     { "ButtonDn" },
  83.     { "WndRaised" },
  84.     { "WndRecessed" },
  85.     { "WellSet" }
  86.   };
  87.  
  88.   for (int i = 0; i < sizeof mapping/sizeof mapping[0]; i++)
  89.     BorderStyle->AddString(mapping[i].Name);
  90.   BorderStyle->SetSelIndex(factory->GetBorderStyle());
  91. }
  92.  
  93. void
  94. TGadgetDialog::CleanupWindow()
  95. {
  96.   TGadgetFactory* factory = GadgetFactories[FactoryIndex];
  97.  
  98.   Id->GetText(Temp, sizeof Temp);
  99.   int id = 0;
  100.   sscanf(Temp, "%d", &id);
  101.   factory->SetId(id);
  102.  
  103.   ResId->GetText(Temp, sizeof Temp);
  104.   factory->SetResId(Temp);
  105.  
  106.   int borderStyle = BorderStyle->GetSelIndex();
  107.   factory->SetBorderStyle(borderStyle);
  108.  
  109.   GetApplication()->GetMainWindow()->GetClientWindow()->PostMessage(WUM_DONEMODIFYINGGADGET);
  110.   TDialog::CleanupWindow();
  111. }
  112.  
  113. //
  114. // class TTextGadgetDialog
  115. // ~~~~~ ~~~~~~~~~~~~~~~~~
  116. class TTextGadgetDialog : public TGadgetDialog {
  117.   public:
  118.     TTextGadgetDialog(int factoryIndex, TWindow* parent, TResId id)
  119.     :
  120.       TGadgetDialog(factoryIndex, parent, id)
  121.     {
  122.       Align = new TComboBox(this, ID_ALIGN);
  123.       NumChar = new TEdit(this, ID_NUMCHARS);
  124.       Text = new TEdit(this, ID_TEXT);
  125.     }
  126.  
  127.    ~TTextGadgetDialog() { CloseWindow(); }
  128.  
  129.     void SetupWindow();
  130.     void CleanupWindow();
  131.  
  132.     TComboBox* Align;
  133.     TEdit* NumChar;
  134.     TEdit* Text;
  135. };
  136.  
  137. void
  138. TTextGadgetDialog::SetupWindow()
  139. {
  140.   TGadgetDialog::SetupWindow();
  141.   TGadgetFactory* factory = GadgetFactories[FactoryIndex];
  142.  
  143.   Text->SetText(factory->GetGadgetText());
  144.   sprintf(Temp, "%d", factory->GetNumChars());
  145.   NumChar->SetText(Temp);
  146.  
  147.   struct {
  148.     char* Name;
  149.   } mapping[] = {
  150.     { "Left" },
  151.     { "Center" },
  152.     { "Right" }
  153.   };
  154.  
  155.   for (int i = 0; i < sizeof mapping/sizeof mapping[0]; i++)
  156.     Align->AddString(mapping[i].Name);
  157.   Align->SetSelIndex(factory->GetAlign());
  158. }
  159.  
  160. void
  161. TTextGadgetDialog::CleanupWindow()
  162. {
  163.   TGadgetFactory* factory = GadgetFactories[FactoryIndex];
  164.  
  165.   NumChar->GetText(Temp, sizeof Temp);
  166.   int numChar = 0;
  167.   sscanf(Temp, "%d", &numChar);
  168.   factory->SetNumChars(numChar);
  169.  
  170.   factory->SetAlign(Align->GetSelIndex());
  171.  
  172.  
  173.   Text->GetText(Temp, sizeof Temp);
  174.   factory->SetGadgetText(Temp);
  175.  
  176.   TGadgetDialog::CleanupWindow();
  177. }
  178.  
  179. //
  180. // class TModeGadgetDialog
  181. // ~~~~~ ~~~~~~~~~~~~~~~~~
  182. class TModeGadgetDialog : public TTextGadgetDialog {
  183.   public:
  184.     TModeGadgetDialog(int factoryIndex, TWindow* parent, TResId id)
  185.     :
  186.       TTextGadgetDialog(factoryIndex, parent, id)
  187.     {
  188.       Key = new TEdit(this, ID_KEY);
  189.     }
  190.  
  191.    ~TModeGadgetDialog() { CloseWindow(); }
  192.  
  193.     void SetupWindow();
  194.     void CleanupWindow();
  195.  
  196.     TEdit* Key;
  197. };
  198.  
  199. void
  200. TModeGadgetDialog::SetupWindow()
  201. {
  202.   TTextGadgetDialog::SetupWindow();
  203.   TGadgetFactory* factory = GadgetFactories[FactoryIndex];
  204.  
  205.   sprintf(Temp, "%d", factory->GetKey());
  206.   Key->SetText(Temp);
  207. }
  208.  
  209. void
  210. TModeGadgetDialog::CleanupWindow()
  211. {
  212.   TGadgetFactory* factory = GadgetFactories[FactoryIndex];
  213.  
  214.   Key->GetText(Temp, sizeof Temp);
  215.   int key = 0;
  216.   sscanf(Temp, "%d", &key);
  217.   factory->SetKey(key);
  218.  
  219.   TTextGadgetDialog::CleanupWindow();
  220. }
  221.  
  222. //
  223. // class TButtonGadgetDialog
  224. // ~~~~~ ~~~~~~~~~~~~~~~~~~~
  225. class TButtonGadgetDialog : public TGadgetDialog {
  226.   public:
  227.     TButtonGadgetDialog(int factoryIndex, TWindow* parent, TResId id)
  228.     :
  229.       TGadgetDialog(factoryIndex, parent, id)
  230.     {
  231.       ButtonState = new TComboBox(this, ID_STATE);
  232.       ButtonType = new TComboBox(this, ID_TYPE);
  233.     }
  234.  
  235.    ~TButtonGadgetDialog() { CloseWindow(); }
  236.  
  237.     void SetupWindow();
  238.     void CleanupWindow();
  239.  
  240.     TComboBox* ButtonState;
  241.     TComboBox* ButtonType;
  242. };
  243.  
  244. void
  245. TButtonGadgetDialog::SetupWindow()
  246. {
  247.   TGadgetDialog::SetupWindow();
  248.   TGadgetFactory* factory = GadgetFactories[FactoryIndex];
  249.  
  250.   struct {
  251.     char* Name;
  252.   } typeMapping[] = {
  253.     { "Command" },
  254.     { "Exclusive" },
  255.     { "NonExclusive" },
  256.     { "SemiExclusive" },
  257.     { "Repeat" }
  258.   };
  259.  
  260.   for (int i = 0; i < sizeof typeMapping/sizeof typeMapping[0]; i++)
  261.     ButtonType->AddString(typeMapping[i].Name);
  262.   ButtonType->SetSelIndex(factory->GetButtonType());
  263.  
  264.   struct {
  265.     char* Name;
  266.   } stateMapping[] = {
  267.     { "Up" },
  268.     { "Down" },
  269.     { "Indeterminate" }
  270.   };
  271.  
  272.   for (int i = 0; i < sizeof stateMapping/sizeof stateMapping[0]; i++)
  273.     ButtonState->AddString(stateMapping[i].Name);
  274.   ButtonState->SetSelIndex(factory->GetButtonState());
  275. }
  276.  
  277. void
  278. TButtonGadgetDialog::CleanupWindow()
  279. {
  280.   TGadgetFactory* factory = GadgetFactories[FactoryIndex];
  281.  
  282.   factory->SetButtonState(ButtonState->GetSelIndex());
  283.   factory->SetButtonType(ButtonType->GetSelIndex());
  284.  
  285.   TGadgetDialog::CleanupWindow();
  286. }
  287.  
  288.  
  289. //----------------------------------------------------------------------------
  290. //
  291. //
  292.  
  293. TStatusManager::TStatusManager(TWindow* parent)
  294. :
  295.   TLayoutWindow(parent, 0),
  296.   Window(0),
  297.   PrevStatus(EndDrag)
  298. {
  299.   TBExpertWindow = TYPESAFE_DOWNCAST(Parent, TTBExpertWindow);
  300.   Attr.Style |= WS_CLIPCHILDREN | WS_CLIPSIBLINGS;
  301.   Attr.ExStyle |= WS_EX_CLIENTEDGE;
  302. }
  303.  
  304. TStatusManager::~TStatusManager()
  305. {
  306. }
  307.  
  308. void
  309. TStatusManager::SetupWindow()
  310. {
  311.   TLayoutWindow::SetupWindow();
  312.   SetDragStatus(Dragging);
  313. }
  314.  
  315. bool
  316. TStatusManager::EvEraseBkgnd(HDC)
  317. {
  318.   return true;
  319. }
  320.  
  321. DEFINE_RESPONSE_TABLE1(TStatusManager, TLayoutWindow)
  322.   EV_WM_ERASEBKGND,
  323. END_RESPONSE_TABLE;
  324.  
  325.  
  326. void
  327. TStatusManager::SetDragStatus(TStatus status, int factoryIndex)
  328. {
  329.   PrevStatus = Status;
  330.   Status = status;
  331.   switch (Status) {
  332.     case BeforeDrag:
  333.       SetBeforeDrag();
  334.       break;
  335.     case BeginDrag:
  336.       SetBeginDrag();
  337.       break;
  338.     case Dragging:
  339.       SetDragging();
  340.       break;
  341.     case EndDrag:
  342.       SetEndDrag();
  343.       break;
  344.     case ModifyGadget:
  345.       ModifyGadgetFactory(factoryIndex);
  346.       break;
  347.   }
  348. }
  349.  
  350. void
  351. TStatusManager::ModifyGadgetFactory(int factoryIndex)
  352. {
  353.   TGadgetFactory::TGadgetType type = GadgetFactories[factoryIndex]->GetType();
  354.  
  355.   if (type == TGadgetFactory::Separator || type == TGadgetFactory::Time)
  356.     return;
  357.  
  358.   delete Window;
  359.  
  360.   switch (type) {
  361.     case TGadgetFactory::Text:
  362.       Window = new TTextGadgetDialog(factoryIndex, this, IDD_MODIFYTEXT);
  363.       break;
  364.  
  365.     case TGadgetFactory::Mode:
  366.       Window = new TModeGadgetDialog(factoryIndex, this, IDD_MODIFYMODE);
  367.       break;
  368.  
  369.     case TGadgetFactory::Button:
  370.       Window = new TButtonGadgetDialog(factoryIndex, this, IDD_MODIFYBUTTON);
  371.       break;
  372.  
  373.     default: {
  374.       Window = 0;
  375.       throw TXOwl("Unknown type");
  376.     }
  377.   }
  378.  
  379.   Window->Create();
  380.   SetLayoutMetrics();
  381. }
  382.  
  383. void
  384. TStatusManager::SetBeforeDrag()
  385. {
  386.   if (PrevStatus != Status) {
  387.     delete Window;
  388.     Window = new TStatic(this, -1, "", 0, 0, 10, 10);
  389.     SetLayoutMetrics();
  390.     Window->Create();
  391.   }
  392.   Window->SetCaption("Please drag one of the available tools on to the toolbar.");
  393. }
  394.  
  395. void
  396. TStatusManager::SetBeginDrag()
  397. {
  398.   if (PrevStatus != Status) {
  399.     delete Window;
  400.     Window = new TStatic(this, -1, "", 0, 0, 10, 10);
  401.     SetLayoutMetrics();
  402.     Window->Create();
  403.   }
  404.   Window->SetCaption("Begin drag");
  405. }
  406.  
  407. void
  408. TStatusManager::SetDragging()
  409. {
  410.   if (PrevStatus != Status) {
  411.     delete Window;
  412.     Window = new TStatic(this, -1, "", 0, 0, 10, 10);
  413.     SetLayoutMetrics();
  414.     Window->Create();
  415.   }
  416.   Window->SetCaption("Now drop it over the toolbar");
  417. }
  418.  
  419. void
  420. TStatusManager::SetEndDrag()
  421. {
  422.   if (PrevStatus != Status) {
  423.     delete Window;
  424.     Window = new TStatic(this, -1, "", 0, 0, 10, 10);
  425.     SetLayoutMetrics();
  426.     Window->Create();
  427.   }
  428.   Window->SetCaption("Thank you");
  429. }
  430.  
  431. void
  432. TStatusManager::SetLayoutMetrics()
  433. {
  434.   if (Window) {
  435.     TLayoutMetrics lmWindow;
  436.     lmWindow.X.SameAs(lmParent, lmLeft);
  437.     lmWindow.Y.SameAs(lmParent, lmTop);
  438.     lmWindow.Width.SameAs(lmParent, lmRight);
  439.     lmWindow.Height.SameAs(lmParent, lmBottom);
  440.     SetChildLayoutMetrics(*Window, lmWindow);
  441.     if (IsWindow())
  442.       Layout();
  443.   }
  444. }
  445.